/*
STL queue 队列容器
栈和队列不支持迭代器 更不支持随机访问

queue 构造函数
  queue<T> que;  // 默认构造函数
  queue(const queue& que);  // 拷贝构造函数

queue 赋值操作
  函数原型
    queue& operator=(const queue& que);  // 重载等号操作符

queue 数据存取
  函数原型
    push(elem);  // 往队列尾部添加元素
    pop();  // 移除队列头部元素
    back();   // 返回最后一个元素
    front();  // 返回第一个元素

queue 大小操作
  函数原型
    empty();  // 判断队列是否为空
    size();  // 返回队列大小
*/

#include <iostream>
#include <queue>
#include <string>
using namespace std;

class Person
{
public:
    Person(string name, int age)
    {
        m_name = name;
        m_age = age;
    }

public:
    string m_name;
    int m_age;
};
int main()
{
    // 创建队列
    queue<Person> que;
    
    Person p1("tang", 30);
    Person p2("sun", 1000);
    Person p3("zhu", 800);
    Person p4("sha",  700);

    // 入队
    que.push(p1);
    que.push(p2);
    que.push(p3);
    que.push(p4);

    cout << "que size: " << que.size() << endl;

    while(!que.empty())
    {
        cout << "\n" << "-------------------------------" << "\n" << endl;
        cout << "front: " << que.front().m_name << ", " << que.front().m_age << endl; 
        cout << "back: "  << que.back().m_name << ", " << que.back().m_age << endl;

        // 出队
        que.pop();
    }

    return 0;
}